package com.zenithmind.chat.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zenithmind.chat.pojo.entity.ChatMessage;
import com.zenithmind.chat.pojo.dto.ChatMessageDTO;
import com.zenithmind.chat.pojo.vo.ChatMessageVO;
import com.zenithmind.common.result.PageResult;

import java.util.List;

/**
 * 聊天消息服务接口 - 简化版本
 *
 * @author ZenithMind Team
 * @since 2025-01-09
 */
public interface ChatMessageService extends IService<ChatMessage> {

    /**
     * 根据会话ID获取消息列表
     *
     * @param sessionId 会话ID
     * @param pageNum 页码
     * @param pageSize 页大小
     * @return 消息列表
     */
    List<ChatMessage> getMessagesBySessionId(String sessionId, Integer pageNum, Integer pageSize);

    /**
     * 发送消息
     *
     * @param message 消息实体
     * @return 是否成功
     */
    Boolean sendMessage(ChatMessage message);

    // Controller需要的额外方法

    /**
     * 发送消息（Controller调用）
     *
     * @param messageDTO 消息DTO
     * @param userId 用户ID
     * @return 消息ID
     */
    String sendMessage(ChatMessageDTO messageDTO, String userId);

    /**
     * 获取群组消息（Controller调用）
     *
     * @param groupId 群组ID
     * @param page 页码
     * @param size 页大小
     * @param messageType 消息类型
     * @param userId 用户ID
     * @return 消息分页列表
     */
    PageResult<ChatMessageVO> getGroupMessages(String groupId, Integer page, Integer size, Integer messageType, String userId);

    /**
     * 根据ID获取消息（Controller调用）
     *
     * @param messageId 消息ID
     * @param userId 用户ID
     * @return 消息VO
     */
    ChatMessageVO getMessageById(String messageId, String userId);

    /**
     * 编辑消息（Controller调用）
     *
     * @param messageId 消息ID
     * @param newContent 新内容
     * @param userId 用户ID
     * @return 是否成功
     */
    Boolean editMessage(String messageId, String newContent, String userId);

    /**
     * 撤回消息（Controller调用）
     *
     * @param messageId 消息ID
     * @param userId 用户ID
     * @return 是否成功
     */
    Boolean recallMessage(String messageId, String userId);

    /**
     * 转发消息（Controller调用）
     *
     * @param messageId 消息ID
     * @param targetIds 目标ID列表
     * @param messageType 消息类型
     * @param userId 用户ID
     * @return 是否成功
     */
    Boolean forwardMessage(String messageId, List<String> targetIds, String messageType, String userId);

    /**
     * 回复消息（Controller调用）
     *
     * @param originalMessageId 原消息ID
     * @param messageDTO 消息DTO
     * @param userId 用户ID
     * @return 消息ID
     */
    String replyMessage(String originalMessageId, ChatMessageDTO messageDTO, String userId);

    /**
     * 点赞消息（Controller调用）
     *
     * @param messageId 消息ID
     * @param userId 用户ID
     * @return 是否成功
     */
    Boolean likeMessage(String messageId, String userId);

    /**
     * 取消点赞（Controller调用）
     *
     * @param messageId 消息ID
     * @param userId 用户ID
     * @return 是否成功
     */
    Boolean unlikeMessage(String messageId, String userId);

    /**
     * 置顶消息（Controller调用）
     *
     * @param messageId 消息ID
     * @param userId 用户ID
     * @return 是否成功
     */
    Boolean pinMessage(String messageId, String userId);

    /**
     * 取消置顶（Controller调用）
     *
     * @param messageId 消息ID
     * @param userId 用户ID
     * @return 是否成功
     */
    Boolean unpinMessage(String messageId, String userId);

    /**
     * 搜索消息（Controller调用）
     *
     * @param keyword 关键词
     * @param groupId 群组ID
     * @param messageType 消息类型
     * @param userId 用户ID
     * @param page 页码
     * @param size 页大小
     * @param timeRange 时间范围
     * @return 消息分页列表
     */
    PageResult<ChatMessageVO> searchMessages(String keyword, String groupId, Integer messageType, String userId, Integer page, Integer size, String timeRange);

    /**
     * 获取消息统计（Controller调用）
     *
     * @param messageId 消息ID
     * @param userId 用户ID
     * @return 统计信息
     */
    Object getMessageStatistics(String messageId, String userId);

    /**
     * 批量删除消息（Controller调用）
     *
     * @param messageIds 消息ID列表
     * @param userId 用户ID
     * @return 是否成功
     */
    Boolean batchDeleteMessages(List<String> messageIds, String userId);

    /**
     * 导出消息（Controller调用）
     *
     * @param groupId 群组ID
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @param format 格式
     * @param userId 用户ID
     * @return 导出结果
     */
    String exportMessages(String groupId, String startDate, String endDate, String format, String userId);
}
